﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using Npgsql;

namespace VoteInformationSystem.Models
{
    public class NpgsqlErststimmenProWahlkreisRepository : IErststimmenProWahlkreisRepository
    {
        public IEnumerable<ErststimmenProWahlkreis> GetByWahlkreis(int Id, int IdVorherigeBundestagswahl)
        {
            IList<ErststimmenProWahlkreis> erststimmenProWahlkreis = new List<ErststimmenProWahlkreis>();

            using (NpgsqlConnection pgConnection = NpgsqlConnectionProvider.GetConnection())

            using (NpgsqlCommand command = new NpgsqlCommand("select * from \"ErststimmenproWahlkreisInformationen\"(:id, :idvorherigebundestagswahl)",
                                                             pgConnection))
            {
                command.Parameters.Add(new NpgsqlParameter("id", NpgsqlTypes.NpgsqlDbType.Integer));
                command.Parameters.Add(new NpgsqlParameter("idvorherigebundestagswahl", NpgsqlTypes.NpgsqlDbType.Integer));
                command.Prepare();
                command.Parameters.First<NpgsqlParameter>().Value = Id;
                command.Parameters.Last<NpgsqlParameter>().Value = IdVorherigeBundestagswahl;
                using (NpgsqlDataReader dataReader = command.ExecuteReader())
                {
                    while (dataReader.Read())
                    {
                        erststimmenProWahlkreis.Add(
                            new ErststimmenProWahlkreis()
                            {
                                Vorname = dataReader.GetString(0),
                                Nachname = dataReader.GetString(1),
                                Jahrgang = dataReader.GetInt32(2),
                                Parteiname = (dataReader.GetValue(3).Equals(DBNull.Value) ? "parteilos" : dataReader.GetString(3)),
                                AnzahlStimmen = Convert.ToInt32(dataReader.GetValue(4)),
                                ProzentStimmen = Convert.ToInt32(dataReader.GetValue(5)),
                                AnzahlVorherigeStimmen = (dataReader.GetValue(6).Equals(DBNull.Value) ? 0 : Convert.ToInt32(dataReader.GetValue(6))),
                                ProzentVorherigeStimmen = (dataReader.GetValue(7).Equals(DBNull.Value) ? 0 : Convert.ToInt32(dataReader.GetValue(7)))
                            });
                    }
                }
            }

            return erststimmenProWahlkreis;
        }
    }
}